package org.zxyj.core.web.controller;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.zxyj.core.utils.RequestUtils;

/**
 * 控制器基础抽象类
 * 
 * @author zhaoyong
 * @version 2016年2月17日
 */
public abstract class BaseController {

	protected Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * 初始化数据绑定 1. 将所有传递进来的String进行HTML编码，防止XSS攻击
	 */
	@InitBinder
	protected void initBinder(WebDataBinder binder) {
		// String类型转换，将所有传递进来的String进行HTML编码，防止XSS攻击
		binder.registerCustomEditor(String.class, new CustomStringEditor());
	}

	public Map<String, Object> getRequestParams(){
		return RequestUtils.getRequestParams();
	}
	
	//追加方法 jinll
	public Map<String, Object> getRequestParamVals(){
		return RequestUtils.getRequestParams();
	}
	
	public Map<String, String> getRequestParamsStr(){
		return RequestUtils.getRequestParamsStr();
	}
	
	/**
	 * 获取页面传递的某一个数组值,
	 * @return Class<T>
	 * @throws Exception
	 */
	public String[] getParaValues(String key){
		return RequestUtils.getParaValues(key);
	}
	
	/**
	 * 获取页面传递的某一个数组值,
	 * @return Class<T>
	 * @throws Exception
	 */
	public String getParaValue(String key){
		return RequestUtils.getParaValue(key);
	}
	
	/**
	 * 获取页面传递的某一个数组值,
	 * @return Class<T>
	 * @throws Exception
	 */
	public String[] getParaValues2(String key){
		return RequestUtils.getParaValues2(key);
	}
	
	/**
	 * 获取请求中某个attr参数值
	    * @Title: getRequestAttr
	    * @param @param key
	    * @param @return    参数
	    * @return T    返回类型
	    * @throws
	 */
	public <T> T getRequestAttr(String key){
		return RequestUtils.getRequestAttr(key);
	}
	/**
	 * 获取请求中传递的某一个数组值,
	 * @return Class<T>
	 * @throws Exception
	 */
	public String[] getAttrValues(String key){
		return RequestUtils.getAttrValues(key);
	}
	/**
	 * 获取请求中所有attr参数集合
	    * @Title: getRequestAttrs
	    * @param @return    参数
	    * @return Map<String,Object>    返回类型
	    * @throws
	 */
	public Map<String,Object> getRequestAttrs(){
		return RequestUtils.getRequestAttrs();
	}
	
	/**
	 * 获取请求session中某个attr参数值
	    * @Title: getRequestAttr
	    * @param @param key
	    * @param @return    参数
	    * @return T    返回类型
	    * @throws
	 */
	public <T> T getSessionAttr(String key){
		return RequestUtils.getSessionAttr(key);
	}
	
	/**
	 * 设置请求session中某个attr参数值
	    * @Title: setSessionAttr
	    * @param @param key
	    * @param @param value    参数
	    * @return void    返回类型
	    * @throws
	 */
	public void setSessionAttr(String key,Object value){
		RequestUtils.setSessionAttr(key, value);
	}
	
	/**
	 * 删除请求session中某个attr参数值
	    * @Title: getRequestAttr
	    * @param @param key
	    * @param @return    参数
	    * @return T    返回类型
	    * @throws
	 */
	public void removeSessionAttr(String key){
		RequestUtils.removeSessionAttr(key);
	}
}